#include<list>
#include<vector>
#include<deque>

namespace xyx
{
    template<class T, class Con = deque<T>>
    class queue
    {
    public:
        void push(const T& x)
        {
            con.push_back(x);
        }

        void pop()
        {
            con.pop_front();
        }

        T& front()
        {
            return con.front();
        }

        T& back()
        {
            return con.back();
        }

        size_t size()
        {
            return con.size();
        }
        bool empty()
        {
            return con.empty();
        }

    private:
        Con con;
    };

    void test_queue()
    {
        xyx::queue<int> q1;
        
        q1.push(1);
        q1.push(2);
        q1.push(3);
        q1.push(4);

        while (!q1.empty())
        {
            cout << q1.front() << " ";
            q1.pop();
        }
        cout << endl;
    }
}

